﻿using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;

namespace TT.Runtime.Function
{
    //函数（固定函数）
    public class TTFunc
    {
        public Type.IType thistype;//是否是某个类型的函数,null 表示全局函数
        public bool isNoname;//匿名函数
        public bool isExport;//是否外部可见（public）
        public bool isCloseure;//闭包函数

        public Type.IType returnType;
        public string name;
        public FuncParam[] _params;

        public FuncBody body;
    }
    public class FuncParam
    {
        public Type.IType type;
        public string name;
        public TTConstData initValue;//初始化值
    }
    public class FuncBody
    {
        public int stacksize;//栈尺寸（寄存器数量 大小累计）
        public List<BlockRange> blocks;//块定义 可以没有，主要用作jmp检查
        public List<Instruction> instructions;//指令
        public List<TTConstData> consts;//常量
    }
    public class BlockRange
    {
        public string comment;
        public int startaddr;
        public int endaddr;
        public bool CanLoop;
        public bool CanBreak;
    }
    //需要返回值公用一块内存,return 之前填好他，可以Move 加个特殊值用来处理



}
